#ifndef _H_PROJECT_H__
#define _H_PROJECT_H__

#include <stdint.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>

#include <Arduino.h>

extern "C" {
#include "user_interface.h"
#include "smartconfig.h"
}

/*********************** 项目相关配置 ********************/
#define VER             "V1.0"
const char* ssid = "TP-LINK_5344";//wifi账号
const char* password = "6206908you11011010";//wifi密码
const unsigned long BAUD_RATE = 115200;// serial connection speed
/*********************************************************/

/************** 主工程函数声明 **************************/
// 13个信道能记录的最大的个数
#define MAX_MAC 200
// 记录已经上传过的MAC地址 最大记录量为1000个 理论上够用了
#define UPLOAD_MAC 1000

int retry = 0;
int hop_channel = 1;
uint32_t hop_time = 0;
unsigned long lastWiFiCheckTick = 0;
bool ledState = 0;
unsigned long lastOneNetPostTick=0;

// 定义Mac 数据结构体
typedef struct {
  uint8_t mac[6];
  unsigned long last_seen;
} mac_t;

static mac_t unique_mac[MAX_MAC];// 记录本次信道内获取到的 MAC地址 最大数量是 MAX_MAC
static int unique_num = 0; //记录当前有多少个唯一的mac地址 保证mac地址的唯一性

static mac_t upload_mac[UPLOAD_MAC];
static int unique_upload_num = 0;

void initSystem();
void wifiTick();
static void enable_promisc(int channel);
static void promisc_cb(uint8_t * buf, uint16_t len);
void do_process(uint8_t *buf);
static void disable_promisc(int channel);
static void print_mac(const uint8_t * mac);
static bool is_normal_mac(const uint8_t * mac);
static bool add_mac(unsigned long now, const uint8_t * mac);
static bool upload_mac_to_server();
/*********************************************************/


/************** ESP8266相关操作 **************************/
void delayRestart(float t);
void delayNs(uint8_t m);
/*********************************************************/

/*************** OneNet HTTP相关操作 *********************/
WiFiClient client;
HTTPClient http;
String response;
const char* host = "api.heclouds.com";
bool postToDeviceDataPoint(String data);
/*********************************************************/

#endif
